OpenTelemetry Colloctor Scraper編
こんにちは、@sugar235711です。
この記事は「ひとりで気になるOSSのソースコード全部読んで何かする Advent Calendar 2025」20日目の記事です。
前回の記事: OpenTelemetry Colloctor Exporter編
Scraper は外部ソースからテレメトリデータを Pullするためのコンポーネントです。Prometheus のようなメトリクス収集パターンで使用されます。現在はメトリクス・ログで利用できますがStatusとしてはdevelopmentなのでまだ本番運用には早いかもしれません。
code:go
// Metrics is the base interface for metrics scrapers.
type Metrics interface {
component.Component
ScrapeMetrics(context.Context) (pmetric.Metrics, error)
}
下記処理が定期的に実行されます。
code:go
func scrapeMetrics(c *controllerscraper.Metrics, nextConsumer consumer.Metrics) {
ctx, done := withScrapeContext(c.timeout)
defer done()
metrics := pmetric.NewMetrics()
for i := range c.scrapers {
md, err := c.scrapersi.ScrapeMetrics(ctx)
if err != nil && !scrapererror.IsPartialScrapeError(err) {
continue
}
md.ResourceMetrics().MoveAndAppendTo(metrics.ResourceMetrics())
}
dataPointCount := metrics.DataPointCount()
ctx = c.obsrecv.StartMetricsOp(ctx)
err := nextConsumer.ConsumeMetrics(ctx, metrics)
c.obsrecv.EndMetricsOp(ctx, "", dataPointCount, err)
}
たとえばHostMetrics Receiverなどで使えます。
https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver
code:go
receivers:
hostmetrics:
collection_interval: 30s
scrapers:
cpu: # CPU 使用率を取得
memory: # メモリ使用量を取得
disk: # ディスク I/O を取得
network: # ネットワーク統計を取得
まとめ
scraperを見ました。contribの一部のreceiverで使えるインターフェースが定義されています。